package done.easy_401_500;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

/**
 * 461. Hamming Distance 汉明距离
 * <p>
 * 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
 * 给出两个整数 x 和 y，计算它们之间的汉明距离。
 * <p>
 * 注意：
 * 0 ≤ x, y < 231.
 * <p>
 * 示例:
 * 输入: x = 1, y = 4
 * 输出: 2
 * 解释:
 * 1   (0 0 0 1)
 * 4   (0 1 0 0)
 * ↑   ↑
 * 上面的箭头指出了对应二进制位不同的位置。
 * <p>
 * 思路：
 * x 与 y两个数做异或运算
 * 1) 1000000000011 % 2 = 1 说明最后一位是 1， count++
 * 2) 1000000000010 % 2 = 0 说明最后一位是 0
 * 3) 1000000000010 >> 1 = 010000000001 移位之后回到 1 继续运算
 * 最后统计余数是1的 count 值，就是汉明距离
 * 2019-03-26 7:17 AM
 **/
@Slf4j
public class HammingDistance {

    @SuppressWarnings("all")
    public int hammingDistance(int x, int y) {
        //190326 first
        return -1;
    }

    @Test
    public void test() {
        log.info("result:{}", hammingDistance(1, 4));
    }
}




























/*
public int hammingDistance(int x, int y) {
    int dis = 0;
    int m = x ^ y;
    while(m != 0) {
        if (m % 2 != 0) {
            dis++;
        }
        m = m >> 1;
    }
    return dis;
}
*/
